package cn.lg.soar.database.base.service;

import cn.lg.soar.database.base.entity.IPathTreeEntity;

import java.io.Serializable;
import java.util.List;

/**
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface IPathTreeService<ID extends Serializable, T extends IPathTreeEntity<ID>> extends ITreeService<ID, T> {

    /**
     * 获取自己和所有下级
     * @param id
     * @return
     */
    List<T> getInferiorsAndSelfList(ID id);

    /**
     * 获取节点路径（获取自己和所有上级）【根节点，n个中间节点，当前节点】
     * @param id 当前节点id
     * @return
     */
    List<T> getNodePathList(ID id);

    /**
     * 更新排序
     * @param id
     * @param sort
     * @return
     */
    void updateSort(ID id, int sort);

    /**
     * 重置排序
     * @return
     */
    void resetSort();

    /**
     * 获取后辈、下级 (根据祖先id获取所有子类)
     * @param id 祖先id
     * @return
     */
    List<T> getInferiorsList(ID id);

    /**
     * 获取祖先链
     * @param ancestorLink 祖先id链路
     * @return
     */
    List<T> getAncestorList(String ancestorLink);

}
